package com.java.second_goods.service;

import com.java.second_goods.entity.Booking;

import java.util.Date;
import java.util.List;

/**
 * 订单 服务层
 */
public interface BookingService {
    /**
     * 查询订单信息
     *
     * @param id 订单ID
     * @return 订单信息
     */
    Booking selectBookingById(String id);

    /**
     * 查询订单列表
     *
     * @param booking 订单信息
     * @return 订单集合
     */
    List<Booking> selectBookingList(Booking booking);

    /**
     * 根据用户ID查询订单列表
     *
     * @param userId 用户ID
     * @return 订单集合
     */
    List<Booking> selectBookingsByUserId(Integer userId);

    /**
     * 根据厨师ID查询订单列表
     *
     * @param chefId 厨师ID
     * @return 订单集合
     */
    List<Booking> selectBookingsByChefId(Integer chefId);

    /**
     * 根据状态查询订单列表
     *
     * @param status 状态
     * @return 订单集合
     */
    List<Booking> selectBookingsByStatus(String status);

    /**
     * 新增订单
     *
     * @param booking 订单信息
     * @return 结果
     */
    int insertBooking(Booking booking);

    /**
     * 修改订单
     *
     * @param booking 订单信息
     * @return 结果
     */
    int updateBooking(Booking booking);

    /**
     * 删除订单信息
     *
     * @param id 订单ID
     * @return 结果
     */
    int deleteBookingById(String id);

    /**
     * 批量删除订单信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteBookingByIds(String[] ids);

    /**
     * 更新订单状态
     *
     * @param bookingId 订单ID
     * @param status 状态
     * @return 结果
     */
    int updateBookingStatus(String bookingId, String status);

    /**
     * 取消订单
     *
     * @param bookingId 订单ID
     * @return 结果
     */
    int cancelBooking(String bookingId);

    /**
     * 检查是否有重复预约
     *
     * @param chefId 厨师ID
     * @param bookingDate 预约日期
     * @param bookingTime 预约时间
     * @return 是否有重复预约
     */
    boolean checkDuplicateBooking(Integer chefId, Date bookingDate, Date bookingTime);

    /**
     * 创建订单
     *
     * @param booking 订单信息
     * @return 订单信息
     */
    Booking createBooking(Booking booking);
}